/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#include "../import/head.h"
#include "../macro/head.h"
#include "../impl/head.h"
#include "page.h"
#include "jsp.h"

namespace xos_jsp
{
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    static jsp::ITEM_DATA xos_item_data;

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

    jsp::jsp()
    {
        init_data();
    }

    jsp::~jsp()
    {
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // public method

    int jsp::get_xos_item_data( ITEM_DATA*& item_ptr )
    {
        int ret = 0;
        xos_item_data.set_container( mgr::container() );
        item_ptr = &xos_item_data;
        return ret;
    }

    int jsp::static_user_init()
    {
        int ret = 0;
        translate_base64();
        return ret;
    }

    int jsp::static_user_term()
    {
        int ret = 0;
        return ret;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 
    // translate base64 code
    int jsp::translate_base64()
    {
        int ret = 0;
        xos_box::i_big_buf * pBuf = mgr::container()->box()->big_buf();
        xos_common::i_misc * pMisc = mgr::container()->common_misc();
        xos::i_crt * pCrt = mgr::container()->crt();
        char * lpszBuf = pBuf->get_data( 0, 0, 0, 0 );
        int nSize = pBuf->get_buf_size( 0 );
        for( int i = 0; i < g_jsp_body_num; ++i )
        {
            const char * lpszSrc = g_pszBase64Html[i];
            if( !lpszSrc )
            {
                continue;
            }
            int len = pCrt->strlen( lpszSrc );
            pMisc->base64_decode( lpszSrc, len, lpszBuf, nSize );
            g_strHtmlBuf[i] = lpszBuf;
        }
        xos_stl::release_interface( pBuf );
        return ret;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    http::i_servlet::enumRet jsp::proc( http::i_task * pTask )
    {
        http::i_servlet::enumRet ret = http::i_servlet::RET_DONE;
        http::i_response * pResponse = pTask->http_response();
        http::i_request * pRequest = pTask->http_request();
        xos_box::i_str_property * pResponseTag = pResponse->tags();
        xos_box::i_str_property * pRequestTag = pRequest->tags();
        {
            xos_box::i_string * pStr = mgr::container()->box()->string();
            xos::i_time * pTime = mgr::container()->xos()->tm();
            pTime->get_time();
            pTime->get_time_string_ymdhms( pStr );
            pTask->values()->set( "time", pStr->get( 0, 0 ) );
            xos_stl::release_interface( pTime );
            xos_stl::release_interface( pStr );
        }
        page_render( pTask, 
            pRequest, 
            pResponse,
            pRequestTag,
            pResponseTag );
        return ret;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int jsp::init_data()
    {
        int ret = 0;
        return ret;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int jsp::init()
    {
        int ret = 0;
        return ret;
    }

    int jsp::term()
    {
        int ret = 0;
        init_data();
        return ret;
    }


} // xos_jsp
